package com.david.course_design.shopping_center.module.goods.goodsDetail.service.impl;

import com.david.course_design.shopping_center.module.goods.goodsDetail.entity.GoodsDetail;
import com.david.course_design.shopping_center.module.goods.goodsDetail.mapper.GoodsDetailMapper;
import com.david.course_design.shopping_center.module.goods.goodsDetail.service.GoodsDetailService;
import com.david.course_design.shopping_center.result.PageObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class GoodsDetailServiceImpl implements GoodsDetailService {
    // 依赖注入 dependency injection
    @Resource
    private GoodsDetailMapper goodsDetailMapper;

    /**
     * 查询商品详情（分页）
     *
     * @param pageObject 分页对象（其中包含 pageSize：每页数据条数；pageNumber：第几页）
     * @return 返回一个 GoodsDetail 对象 这个对象中包含一个 GoodsDetail 对象的集合和一些分页相关的其他信息
     */
    @Override
    public PageInfo<GoodsDetail> selectGoodsDetailPaging(PageObject pageObject) {

        PageHelper.startPage(pageObject.getPageNumber(), pageObject.getPageSize());

        PageInfo<GoodsDetail> goodsDetailPageInfo = new PageInfo<>(goodsDetailMapper.selectAll());

        if (goodsDetailPageInfo != null) {
            //  如果返回的含有商品信息对象 的 集合 的 分页对象不为空

            // 输出日志
            System.out.println(goodsDetailPageInfo);
            System.out.println();

            //  将返回的憨厚商品信息对象 的 集合 的 分页对象返回给调用处
            return goodsDetailPageInfo;
        }

        //  如果返回的含有商品信息对象 的 集合 的 分页对象为空(null) 将 null 返回给调用处
        return null;
    }

    /**
     * 查询所有商品详情信息（不分页）
     *
     * @return 返回所有商品详情信息集合
     */
    @Override
    public List<GoodsDetail> selectAllGoodsDetail() {
        //  查询所有商品信息 返回一个商品信息对象的集合
        List<GoodsDetail> goodsDetails = goodsDetailMapper.selectAll();

        if (goodsDetails != null) {
            //  如果返回的商品信息对象的集合不为空

            //  输出日志
            System.out.println(goodsDetails);
            System.out.println();

            //  将返回的商品信息对象的集合返回给调用处
            return goodsDetails;
        }

        //  如果返回的商品信息对象的集合为空（null） 返回 null
        return null;
    }

    /**
     * 通过商品详情主键（id）查询商品详情
     *
     * @param id 商品详情主键
     * @return 查询到的商品详情
     */
    @Override
    public GoodsDetail selectGoodsDetailById(Integer id) {

        //  通过主键查询商品详情信息，返回一个商品详情信息对象
        GoodsDetail goodsDetail = goodsDetailMapper.selectGoodsDetailById(id);

        //  判断得到的商品详情信息对象是否为空
        if (goodsDetail != null) {
            //  输出日志
            System.out.println(goodsDetail);
            System.out.println();

            //  将得到的商品详情信息对象返回给调用处
            return goodsDetail;

        } else {

            //  否则返回 空（null）
            return null;

        }

    }
}
